package main

import (
	"fmt"
	"server/game"
	"server/gate"
	"server/locator"
	"server/share/config"
	"server/social"

	"github.com/hwcer/cosgo"
)

func main() {
	fmt.Println("开始程序执行...")

	//// 检查tmp目录是否存在
	//if _, err := os.Stat("./tmp"); os.IsNotExist(err) {
	//	fmt.Println("创建tmp目录...")
	//	if err := os.MkdirAll("./tmp", 0755); err != nil {
	//		fmt.Printf("无法创建tmp目录: %v\n", err)
	//	}
	//}
	//
	//// 强制进行垃圾回收，确保内存状态干净
	//fmt.Println("执行垃圾回收...")
	//runtime.GC()
	//
	//// 创建内存分析文件
	//fmt.Println("创建内存分析文件...")
	//memFile, err := os.Create("./tmp/mem.prof")
	//if err != nil {
	//	fmt.Printf("无法创建内存分析文件: %v\n", err)
	//} else {
	//	fmt.Println("成功创建内存分析文件")
	//	defer func() {
	//		fmt.Println("关闭内存分析文件...")
	//		if err := memFile.Close(); err != nil {
	//			fmt.Printf("关闭文件时出错: %v\n", err)
	//		}
	//	}()
	//}

	cosgo.SetBanner(banner)
	cosgo.Use(config.New())
	cosgo.Use(social.New())
	cosgo.Use(locator.New())
	cosgo.Use(game.New())
	cosgo.Use(gate.New())
	cosgo.Start(true)
	//// 启动服务
	//fmt.Println("启动服务...")
	//go func() {
	//	cosgo.Start(true)
	//}()
	//
	//// 等待一段时间，让服务有机会初始化并分配内存
	//fmt.Println("等待3秒让服务初始化...")
	//time.Sleep(3 * time.Second)
	//
	//// 再次强制垃圾回收，然后写入内存分析数据
	//fmt.Println("再次执行垃圾回收...")
	//runtime.GC()
	//if memFile != nil {
	//	fmt.Println("正在生成内存分析报告...")
	//	if err := pprof.WriteHeapProfile(memFile); err != nil {
	//		fmt.Printf("无法写入内存分析数据: %v\n", err)
	//	} else {
	//		fmt.Println("内存分析报告已保存到 ./tmp/mem.prof")
	//		// 立即刷新文件，确保数据写入磁盘
	//		if err := memFile.Sync(); err != nil {
	//			fmt.Printf("刷新文件时出错: %v\n", err)
	//		} else {
	//			fmt.Println("内存分析数据已同步到磁盘")
	//		}
	//	}
	//}
	//
	//fmt.Println("程序将在3秒后退出...")
	//time.Sleep(3 * time.Second)
	//fmt.Println("程序退出")
}

func banner() {
	str := "\n大威天龙，大罗法咒，般若诸佛，般若巴嘛空。\n"
	fmt.Printf(str)
}
